/*
 * Golazo MA4
 * Copyright (C) 2008 Golazo MASHUP AWARD 4th team.
 * http://code.google.com/p/golazo/
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License 
 * along with this program. If not, see <http://www.gnu.org/licenses/>.
 */

/**
 * checkUserId
 */
function checkUserId() {

  var userId = $('#form_userId');
  var message = $('#form_message')
    .hide();
  
  if (!Golazo.User.checkUserId(userId.val())) {
    
	message
	  .text('会員 ID に誤りがあります。会員 ID を確認してください。')
	  .show();
	
	return false;
  }

  if (existsUser(userId.val())) {
    
	message
	  .text('会員 ID `' + userId.val() + '` は使えません。別の会員 ID を入力してください。')
	  .show();
	
	return false;
  }

  return true;
};
checkUserId.runat = 'both';

/**
 * checkPassword12
 */
function checkPassword12() {

  var password1 = $('#form_password1');
  var password2 = $('#form_password2');
  var message = $('#form_message')
    .hide();

  if (!Golazo.User.checkPassword(password1.val())) {
    
	message
	  .text('パスワードに誤りがあります。パスワードを確認してください。')
	  .show();
	
	return false;
  }

  if (password1.val() != password2.val()) {
    
	message
	  .text('パスワードと再入力したパスワードが一致していません。パスワードを確認してください。')
	  .show();
	
	return false;
  }

  return true;
};
checkPassword12.runat = 'both';

/**
 * checkEmail
 */
function checkEmail() {

  var email = $('#form_email');
  var message = $('#form_message')
    .hide();

  var val = email.val();
  if (val != '' && !Golazo.User.checkEmail(val)) {
    
	message
	  .text('メールアドレスに誤りがあります。メールアドレスを確認してください。')
	  .show();
	
	return false;
  }

  return true;
};
checkEmail.runat = 'both';

/**
 * checkAgree
 */
function checkAgree() {

  var agree = $('#form_agree');
  var message = $('#form_message')
    .hide();
	
  if (!agree.is(':checked')) {
    
	message
	  .text('利用規約に同意していません。')
	  .show();
	
	return false;
  }

  return true;
};
checkAgree.runat = 'both';

/**
 * serverload
 */
function serverload() {

  // dispatch 
  Golazo.dispatch(function(request, response, session) {

    // 私は誰か
	var me = Golazo.User.find(session.get('me'));
    if (me)
      return $('#succeeded')
	    .layout(me);

    // GET
	if (request.method != 'POST') {

	  return $('#form')
	    .layout(/*me*/);
    
	// POST
	} else {
  
      var agree = $('#form_agree')
	    .attr('checked', request.data.agree == 'on');

      var userId = $('#form_userId')
	    .val(request.data.userId || '');
      
	  var password1 = $('#form_password1')
	    .val(request.data.password1 || '');
      
	  var password2 = $('#form_password2')
	    .val(request.data.password2 || '');
      
	  var email = $('#form_email')
	    .val(request.data.email || '');

      // 利用規約に同意したかどうか
	  if (!checkAgree())
	    return $('#form')
		  .layout(/*me*/);

      // 会員IDが期待どおりか
      if (!checkUserId())
	    return $('#form')
		  .layout(/*me*/);

      // パスワードが期待どおりか
	  if (!checkPassword12())
        return $('#form')
		  .layout(/*me*/);

      // メールアドレスが期待どおりか
	  if (!checkEmail())
        return $('#form')
		  .layout(/*me*/);

      // 会員を保存する
	  try {
	    me = new Golazo.User();
        me.userId = userId.val();
        me.password = password1.val();
        me.email = email.val();
        me.save();
      } catch (e) {
	    throw new Error(''+e);
      }
  
      session.set('me', me.userId);
  
      return $('#succeeded')
	    .layout(me);
        //.metaRefresh('/me.html', 60);
	}
  });
};

/**
 * load
 */
function load() {
  $(document.form).submit(function() {
    return checkAgree() && checkUserId() && checkPassword12() && checkEmail();
  });
};
load.runat = 'client';